﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Elysium.Demo;
using SIIE_ERP.Codigo;
using Microsoft.Office.Interop.Excel;
using SIIE_ERP.Codigo.Configuracion;
using SIIE_ERP.BaseDatos.Configuracion;
using SIIE_ERP.BaseDatos;
using System.Data;
using SIIE_ERP.BaseDatos.Compras.Catalogos;

namespace Elysium.Demo.Configuracion
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class CargaDatos_Proveedor2 : UserControl
    {
        private UsuarioActivo _sesion;
        private int Id_Grupo;

        public CargaDatos_Proveedor2(ref UsuarioActivo usuario)
        {
            InitializeComponent();
            this._sesion = usuario;  
        }

        private void ButtonInformacion_Click_1(object sender, RoutedEventArgs e)
        {
            WindowAyuda Ayuda = new Elysium.Demo.WindowAyuda("CargaDatos.htm", "Ayuda");
            Ayuda.Owner = SIIE_ERP.View.NavegacionUI.GetParentWindow(this); Ayuda.ShowDialog();
        }

        private void ButtonRegresar_Click_1(object sender, RoutedEventArgs e)
        {
            ((ScrollViewer)this.Parent).Content = new CargaDatos_Proveedor1(ref _sesion);
        }

        private void Busqueda_Click_1(object sender, RoutedEventArgs e)
        {
            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();

            dlg.DefaultExt = ".xlsx";
            dlg.Filter = "Excel Files (*.xlsx)|*.xlsx";

            // Muestra el Open File Dialog
            Nullable<bool> result = dlg.ShowDialog();

            // Obtiene el archivo
            if (result == true)
            {
                TextBox_Busqueda.Text = dlg.FileName;                
            }
            else
            {
                MessageBox.Show("Se canceló la Selección.");
            }
        }

        private void Button_Guardar_Click(object sender, RoutedEventArgs e)
        {
            if (String.IsNullOrEmpty(TextBox_Busqueda.Text))
            {
                MessageBox.Show("Favor de seleccionar un archivo");
            }
            else
            {
                try
                {
                    dbo_Cat_Proveedor art = new dbo_Cat_Proveedor(_sesion.RFC, _sesion.UserName);
                    dbo_CargaDatos CargaDatos_Obj = new dbo_CargaDatos(_sesion.RFC, _sesion.UserName);
                    bool IsValid = true;

                    Microsoft.Office.Interop.Excel.Application xlsApp = default(Microsoft.Office.Interop.Excel.Application);
                    Workbook xlsWB = default(Workbook);
                    Worksheet xlsSheet = default(Worksheet);
                    Range xlsCell = default(Range);

                    xlsApp = new Microsoft.Office.Interop.Excel.Application();
                    xlsApp.Visible = false;
                    xlsWB = xlsApp.Workbooks.Open(TextBox_Busqueda.Text);
                    xlsSheet = xlsWB.Worksheets[1];

                    xlsCell = xlsSheet.Range["A1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Razón Social del Proveedor")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["B1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("RFC Del Proveedor")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["C1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Nombre Comercial del Proveedor")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["D1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Grupo de Proveedor")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["E1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Dirección del Proveedor (Calle)")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["F1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Dirección del Proveedor (Número Exterior)")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["G1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Dirección del Proveedor (Número Interior)")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["H1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Dirección del Proveedor (Entre Calle 1)")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["I1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Dirección del Proveedor (Entre Calle 2)")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["J1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Dirección del Proveedor (Colonia)")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["K1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Dirección del Proveedor (Referencia)")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["L1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Dirección del Proveedor (Población)")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["M1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Dirección del Proveedor (Código Postal)")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["N1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Dirección del Proveedor (País)")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["O1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Dirección del Proveedor (Estado)")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["P1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Dirección del Proveedor (Delegación o Municipio)")))
                    {
                        IsValid = false;
                    }

                    if (!(IsValid))
                    {
                        MessageBox.Show("El documento seleccionado tiene un formato incorrecto. Favor de Verificar.");
                        xlsWB.Close();

                        return;
                    }

                    List<CargaDatos_Proveedor> MiLista = new List<CargaDatos_Proveedor>();

                    for (int index = 2; index <= 1000000; index++)
                    {
                        Range Blank1 = default(Range);
                        Range Blank2 = default(Range);
                        Range Blank3 = default(Range);
                        Range Blank4 = default(Range);
                        Range Blank5 = default(Range);

                        Blank1 = xlsSheet.Range["A" + index.ToString()];
                        Blank2 = xlsSheet.Range["A" + (index + 1).ToString()];
                        Blank3 = xlsSheet.Range["A" + (index + 2).ToString()];
                        Blank4 = xlsSheet.Range["A" + (index + 3).ToString()];
                        Blank5 = xlsSheet.Range["A" + (index + 4).ToString()];

                        if ((string.IsNullOrEmpty(Blank1.Text.ToString().Trim()) && string.IsNullOrEmpty(Blank2.Text.ToString().Trim()) && string.IsNullOrEmpty(Blank3.Text.ToString().Trim()) && string.IsNullOrEmpty(Blank4.Text.ToString().Trim()) && string.IsNullOrEmpty(Blank5.Text.ToString().Trim())))
                        {
                            break;
                        }

                        Range Column1 = default(Range);
                        Range Column2 = default(Range);
                        Range Column3 = default(Range);
                        Range Column4 = default(Range);
                        Range Column5 = default(Range);
                        Range Column6 = default(Range);
                        Range Column7 = default(Range);
                        Range Column8 = default(Range);
                        Range Column9 = default(Range);
                        Range Column10 = default(Range);
                        Range Column11 = default(Range);
                        Range Column12 = default(Range);
                        Range Column13 = default(Range);
                        Range Column14 = default(Range);
                        Range Column15 = default(Range);
                        Range Column16 = default(Range);

                        Column1 = xlsSheet.Range["A" + index.ToString()];
                        Column2 = xlsSheet.Range["B" + index.ToString()];
                        Column3 = xlsSheet.Range["C" + index.ToString()];
                        Column4 = xlsSheet.Range["D" + index.ToString()];
                        Column5 = xlsSheet.Range["E" + index.ToString()];
                        Column6 = xlsSheet.Range["F" + index.ToString()];
                        Column7 = xlsSheet.Range["G" + index.ToString()];
                        Column8 = xlsSheet.Range["H" + index.ToString()];
                        Column9 = xlsSheet.Range["I" + index.ToString()];
                        Column10 = xlsSheet.Range["J" + index.ToString()];
                        Column11 = xlsSheet.Range["K" + index.ToString()];
                        Column12 = xlsSheet.Range["L" + index.ToString()];
                        Column13 = xlsSheet.Range["M" + index.ToString()];
                        Column14 = xlsSheet.Range["N" + index.ToString()];
                        Column15 = xlsSheet.Range["O" + index.ToString()];
                        Column16 = xlsSheet.Range["P" + index.ToString()];

                        CargaDatos_Proveedor MiProveedor = new CargaDatos_Proveedor();

                        MiProveedor.RazonSocial_Prov = Column1.Text.ToString().Trim();
                        MiProveedor.RFC_Prov = Column2.Text.ToString().Trim();
                        MiProveedor.NombreComercial_Prov = Column3.Text.ToString().Trim();
                        MiProveedor.Grupo_Prov = Column4.Text.ToString().Trim();
                        MiProveedor.Dir_Prov_Calle = Column5.Text.ToString().Trim();
                        MiProveedor.Dir_Prov_NumExt = Column6.Text.ToString().Trim();
                        MiProveedor.Dir_Prov_NumInt = Column7.Text.ToString().Trim();
                        MiProveedor.Dir_Prov_EntreCalle1 = Column8.Text.ToString().Trim();
                        MiProveedor.Dir_Prov_EntreCalle2 = Column9.Text.ToString().Trim();
                        MiProveedor.Dir_Prov_Colonia = Column10.Text.ToString().Trim();
                        MiProveedor.Dir_Prov_Referencia = Column11.Text.ToString().Trim();
                        MiProveedor.Dir_Prov_Poblacion = Column12.Text.ToString().Trim();
                        MiProveedor.Dir_Prov_CP = Column13.Text.ToString().Trim();
                        MiProveedor.Dir_Prov_Pais = Column14.Text.ToString().Trim();
                        MiProveedor.Dir_Prov_Estado = Column15.Text.ToString().Trim();
                        MiProveedor.Dir_Prov_Delegacion = Column16.Text.ToString().Trim();

                        if ((MiProveedor.RazonSocial_Prov.Length > 256))
                        {
                            MiProveedor.RazonSocial_Prov = MiProveedor.RazonSocial_Prov.Substring(0, 256);
                        }

                        if ((MiProveedor.RFC_Prov.Length > 20))
                        {
                            MiProveedor.RFC_Prov = MiProveedor.RFC_Prov.Substring(0, 20);
                        }

                        if ((MiProveedor.NombreComercial_Prov.Length > 50))
                        {
                            MiProveedor.NombreComercial_Prov = MiProveedor.NombreComercial_Prov.Substring(0, 50);
                        }

                        if ((MiProveedor.Grupo_Prov.Length > 50))
                        {
                            MiProveedor.Grupo_Prov = MiProveedor.Grupo_Prov.Substring(0, 50);
                        }

                        if ((MiProveedor.Dir_Prov_Calle.Length > 256))
                        {
                            MiProveedor.Dir_Prov_Calle = MiProveedor.Dir_Prov_Calle.Substring(0, 256);
                        }

                        if ((MiProveedor.Dir_Prov_NumExt.Length > 50))
                        {
                            MiProveedor.Dir_Prov_NumExt = MiProveedor.Dir_Prov_NumExt.Substring(0, 50);
                        }

                        if ((MiProveedor.Dir_Prov_NumInt.Length > 50))
                        {
                            MiProveedor.Dir_Prov_NumInt = MiProveedor.Dir_Prov_NumInt.Substring(0, 50);
                        }

                        if ((MiProveedor.Dir_Prov_EntreCalle1.Length > 256))
                        {
                            MiProveedor.Dir_Prov_EntreCalle1 = MiProveedor.Dir_Prov_EntreCalle1.Substring(0, 256);
                        }

                        if ((MiProveedor.Dir_Prov_EntreCalle2.Length > 256))
                        {
                            MiProveedor.Dir_Prov_EntreCalle2 = MiProveedor.Dir_Prov_EntreCalle2.Substring(0, 256);
                        }

                        if ((MiProveedor.Dir_Prov_Colonia.Length > 256))
                        {
                            MiProveedor.Dir_Prov_Colonia = MiProveedor.Dir_Prov_Colonia.Substring(0, 256);
                        }

                        if ((MiProveedor.Dir_Prov_Referencia.Length > 256))
                        {
                            MiProveedor.Dir_Prov_Referencia = MiProveedor.Dir_Prov_Referencia.Substring(0, 256);
                        }

                        if ((MiProveedor.Dir_Prov_Poblacion.Length > 256))
                        {
                            MiProveedor.Dir_Prov_Poblacion = MiProveedor.Dir_Prov_Poblacion.Substring(0, 256);
                        }

                        if ((MiProveedor.Dir_Prov_CP.Length > 50))
                        {
                            MiProveedor.Dir_Prov_CP = MiProveedor.Dir_Prov_CP.Substring(0, 50);
                        }

                        if ((MiProveedor.Dir_Prov_Pais.Length > 50))
                        {
                            MiProveedor.Dir_Prov_Pais = MiProveedor.Dir_Prov_Pais.Substring(0, 50);
                        }

                        if ((MiProveedor.Dir_Prov_Estado.Length > 50))
                        {
                            MiProveedor.Dir_Prov_Estado = MiProveedor.Dir_Prov_Estado.Substring(0, 50);
                        }

                        if ((MiProveedor.Dir_Prov_Delegacion.Length > 50))
                        {
                            MiProveedor.Dir_Prov_Delegacion = MiProveedor.Dir_Prov_Delegacion.Substring(0, 50);
                        }

                        MiProveedor.RFC = _sesion.RFC;
                        MiProveedor.IsValid = true;

                        if ((string.IsNullOrEmpty(MiProveedor.RazonSocial_Prov) || string.IsNullOrEmpty(MiProveedor.RazonSocial_Prov)))
                        {
                            MiProveedor.IsValid = false;
                        }
                        if ((MiProveedor.RFC_Prov.Length > 13 || MiProveedor.RFC_Prov.Length < 12))
                        {
                            MiProveedor.IsValid = false;
                        }
                        if ((!(MiProveedor.Dir_Prov_CP.Length == 0 || MiProveedor.Dir_Prov_CP.Length == 5)))
                        {
                            MiProveedor.IsValid = false;
                        }

                        if ((from o in MiLista where MiProveedor.RFC_Prov.Equals(o.RFC_Prov) select o).Count() > 0)
                        {
                            MiProveedor.IsValid = false;
                        }

                        if ((from o in MiLista where MiProveedor.RazonSocial_Prov.Equals(o.RazonSocial_Prov) select o).Count() > 0)
                        {
                            MiProveedor.IsValid = false;
                        }

                        //Existe Nombre                        
                        if (art.Get_Proveedors_Por_RFC(MiProveedor.RFC_Prov).Rows.Count > 0)
                            MiProveedor.IsValid = false;

                        MiLista.Add(MiProveedor);
                    }

                    if ((MiLista.Count == 0))
                    {
                        MessageBox.Show("La plantilla no contenía información. Favor de volver a intentar.");
                        xlsWB.Close();
                        return;
                    }

                    //Borramos los datos temporales existentes 
                    CargaDatos_Obj.DeleteTemporales();

                    //Obtenemos el Id del Grupo
                    Id_Grupo = CargaDatos_Obj.Proveedor_NextIdGrupo();

                    //Dim dt As DataTable = New DataTable()
                    System.Data.DataTable dt = new System.Data.DataTable();

                    dt.Columns.Add("RazonSocial_Prov");
                    dt.Columns.Add("RFC_Prov");
                    dt.Columns.Add("NombreComercial_Prov");
                    dt.Columns.Add("Grupo_Prov");
                    dt.Columns.Add("Dir_Prov_Calle");
                    dt.Columns.Add("Dir_Prov_NumExt");
                    dt.Columns.Add("Dir_Prov_NumInt");
                    dt.Columns.Add("Dir_Prov_EntreCalle1");
                    dt.Columns.Add("Dir_Prov_EntreCalle2");
                    dt.Columns.Add("Dir_Prov_Colonia");
                    dt.Columns.Add("Dir_Prov_Referencia");
                    dt.Columns.Add("Dir_Prov_Poblacion");
                    dt.Columns.Add("Dir_Prov_CP");
                    dt.Columns.Add("Dir_Prov_Pais");
                    dt.Columns.Add("Dir_Prov_Estado");
                    dt.Columns.Add("Dir_Prov_Delegacion");
                    dt.Columns.Add("IsValid");

                    foreach (CargaDatos_Proveedor n in MiLista)
                    {
                        Respuesta r = CargaDatos_Obj.Proveedor_Insert
                        (
                            _sesion.RFC,
                            Id_Grupo,
                            n.RazonSocial_Prov,
                            n.RFC_Prov,
                            n.NombreComercial_Prov,
                            n.Grupo_Prov,
                            n.Dir_Prov_Calle,
                            n.Dir_Prov_NumExt,
                            n.Dir_Prov_NumInt,
                            n.Dir_Prov_EntreCalle1,
                            n.Dir_Prov_EntreCalle2,
                            n.Dir_Prov_Colonia,
                            n.Dir_Prov_Referencia,
                            n.Dir_Prov_Poblacion,
                            n.Dir_Prov_CP,
                            n.Dir_Prov_Pais,
                            n.Dir_Prov_Estado,
                            n.Dir_Prov_Delegacion,
                            n.IsValid
                        );

                        DataRow dr = null;
                        dr = dt.NewRow();

                        dr["RazonSocial_Prov"] = n.RazonSocial_Prov;
                        dr["RFC_Prov"] = n.RFC_Prov;
                        dr["NombreComercial_Prov"] = n.NombreComercial_Prov;
                        dr["Grupo_Prov"] = n.Grupo_Prov;
                        dr["Dir_Prov_Calle"] = n.Dir_Prov_Calle;
                        dr["Dir_Prov_NumExt"] = n.Dir_Prov_NumExt;
                        dr["Dir_Prov_NumInt"] = n.Dir_Prov_NumInt;
                        dr["Dir_Prov_EntreCalle1"] = n.Dir_Prov_EntreCalle1;
                        dr["Dir_Prov_EntreCalle2"] = n.Dir_Prov_EntreCalle2;
                        dr["Dir_Prov_Colonia"] = n.Dir_Prov_Colonia;
                        dr["Dir_Prov_Referencia"] = n.Dir_Prov_Referencia;
                        dr["Dir_Prov_Poblacion"] = n.Dir_Prov_Poblacion;
                        dr["Dir_Prov_CP"] = n.Dir_Prov_CP;
                        dr["Dir_Prov_Pais"] = n.Dir_Prov_Pais;
                        dr["Dir_Prov_Estado"] = n.Dir_Prov_Estado;
                        dr["Dir_Prov_Delegacion"] = n.Dir_Prov_Delegacion;
                        dr["IsValid"] = n.IsValid;

                        dt.Rows.Add(dr);
                    }

                    xlsWB.Close();

                    ((ScrollViewer)this.Parent).Content = new CargaDatos_Proveedor3(ref _sesion, ref dt);
                }
                catch (Exception)
                {
                    MessageBox.Show("Error");
                }
            }
        }
    }
}
